
/**
 * Copyright 2009 cestum.org
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 
package org.waveprotocol.wave.model.document.operation.util
{
	import org.waveprotocol.wave.model.document.operation.AnnotationBoundaryMap;
	import org.waveprotocol.wave.model.document.operation.Attributes;
	import org.waveprotocol.wave.model.document.operation.AttributesUpdate;
	import org.waveprotocol.wave.model.document.operation.DocumentOperationCursor;

	public final class ExplodedDocOpCursor implements DocumentOperationCursor
	{
		var target:DocumentOperationCursor;
		public function ExplodedDocOpCursor(target:DocumentOperationCursor)
		{
			this.target =target;
		}

		  public function deleteCharacters(chars:String):void {
        for (var i:int= 0; i < chars.length; i++) {
          target.deleteCharacters(chars.substring(i, i + 1));
        }
      }

      
      public function deleteElementEnd():void {
        target.deleteElementEnd();
      }

      
      public function deleteElementStart(type:String, attrs:Attributes):void {
        target.deleteElementStart(type, attrs);
      }

      
      public function replaceAttributes(oldAttrs:Attributes, newAttrs:Attributes):void {
        target.replaceAttributes(oldAttrs, newAttrs);
      }

      
      public function retain(itemCount:int):void {
        for (var i:int= 0; i < itemCount; i++) {
          target.retain(1);
        }
      }

      
      public function updateAttributes(attrUpdate:AttributesUpdate):void {
        target.updateAttributes(attrUpdate);
      }

      
      public function annotationBoundary(map:AnnotationBoundaryMap):void {
        target.annotationBoundary(map);
      }

      
      public function characters(chars:String):void {
        for (var i:int= 0; i < chars.length; i++) {
          target.characters(chars.substring(i, i + 1));
        }
      }

      
      public function elementEnd():void {
        target.elementEnd();
      }

      
      public function elementStart(type:String, attrs:Attributes):void {
        target.elementStart(type, attrs);
      }
		
	}
}